perm filename PRVLST.NEW[SS,SYS] blob
sn#430422 filedate 1979-04-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 A B C D E T TT TTT R S W X Y Z P DSK LST PRVBIT UFDN LHPRVS NLHPRV RHPRVS NRHPRV WANTPR
C00006 00003 BADNAM GO LHLOOP RHLOOP NOTRH GOTBIT LOOP LSTUSR SIXIN SIXINL SIXINX SIXIN2
C00011 00004 MFDSOR MFDSO1 MFDSO2 MFDSO3 MFDSO4 MFDSO5 LADJ RADJ
C00014 00005 LIST PRIVLP PRIVL1 NOPRV1 PRNBIT PRNLB1 PRNBTR PRNRB1 OCTLH OCTRH OCTOUT OCTOU1 OUTSIX SIXPUT SIXPU1 PUTSTR PUTST1 PUT CPOPJ1 CPOPJ
C00017 00006 NODISK NOMFD NOCORE MFDERR EMMFD NOTUFD NOUFD NORDIN NOENT PUTERR NOWRIN MFDPTR LSTBUF RDINFO INFO PDL
C00019 ENDMK
C⊗;
;A B C D E T TT TTT R S W X Y Z P DSK LST PRVBIT UFDN LHPRVS NLHPRV RHPRVS NRHPRV WANTPR
TITLE PRVLST Make PRIVS.LST, the list of what users have what privileges
IFNDEF FTUSER,<FTUSER←←0> ;Set to -1 to make program that just
;types out all users with given privilege
A←1
B←2
C←3
D←4
E←5
T←6
TT←7
TTT←10
R←11
S←12
W←13
X←14
Y←15
Z←16
P←17
DSK←←1
LST←←2
;INFO WORDS
PRVBIT←←1
UFDN←←20 ;LENGTH OF A UFD ENTRY
DEFINE PRIVS <
;LEFT HALF
XLPRIV PRI,400000
XLPRIV DAW,200000 ;DISK ABSOLUTE WRITE
XLPRIV PRO,100000 ;FILE SYSTEM RENAME PRIV
XLPRIV REA,40000 ;FILE SYSTEM READ PRIV
XLPRIV WRT,20000 ;FILE SYSTEM WRITE PRIV
;;XLPRIV UDP,10000
XLPRIV AAO,10000 ;ACCESS ALIAS AS OWNER
XLPRIV UPG,4000 ;SELECT OTHER DPYS WITH UPGIOT
XLPRIV MES,2000 ;CAN DO TTYMES ARBITRARILY
XLPRIV KIL,1000
XLPRIV DEV,400 ;CAN USE DET/ATT DEVICE COMMAND
XLPRIV SEG,200
XLPRIV SSL,100 ;CAN SET SERVICE LEVEL RESERVATION TABLE
XLPRIV ACW,40 ;CAN DO ABS MODE WRITE USING SETPR2
XLPRIV INF,20 ;CAN READ AND WRITE SPECIAL FILE INFO
XLPRIV TLK,10
XLPRIV XGP,2 ;THIS IS THE XGP FONT COMPILER
XLPRIV LUP,1 ;LOCAL USER PRIVILEGE
;RIGHT HALF
XRPRIV ATT,400000 ;ALLOWS ATTACH TO PHANTOMS
XRPRIV LIV,200000 ;DEFEATS AUTOLOGOUT, LOOKED FOR BY SPY
XRPRIV CSP,40 ;COMPUTER SCIENCE PERSONNEL FILES GROUP
XRPRIV ACT,20 ;ACCOUNTING FILES GROUP
XRPRIV DEC,10 ;DEC PROPRIETARY SOFTWARE FILES GROUP
XRPRIV SCY,4 ;SECRETARY GROUP
XRPRIV SYS,2 ;SYSTEMS PROGRAMMERS GROUP
XRPRIV MAS,1 ;[1,YOURSELF] GROUP (MUST BE A RH PRIV FOR DSKSER)
>
DEFINE XLPRIV ! (NAME,BIT) <
NAME!PRV←←BIT
BIT,,'NAME'
>
DEFINE XRPRIV (NAME,BIT) <>
LHPRVS: PRIVS
NLHPRV←←.-LHPRVS
DEFINE XLPRIV (NAME,BIT) <>
DEFINE XRPRIV ! (NAME,BIT) <
NAME!PRV←←BIT
BIT,,'NAME'
>
RHPRVS: PRIVS
NRHPRV←←.-RHPRVS
;WANTPR←←DAWPRV!REAPRV!ACWPRV!INFPRV ;PRIVILEGES THIS PROGRAM WANTS
EXTERNAL JOBFF,JOBREL
;BADNAM GO LHLOOP RHLOOP NOTRH GOTBIT LOOP LSTUSR SIXIN SIXINL SIXINX SIXIN2
IFN FTUSER,<
BADNAM: CLRBFI
OUTSTR [ASCIZ/
Specify three-letter name or octal value only please./]
>;IFN FTUSER
GO: RESET
MOVE P,[-100,,PDL-1]
IFN FTUSER,<
OUTSTR [ASCIZ/
Privilege you wish to know the holders of: /]
PUSHJ P,SIXIN ;Read sixbit name of privilege
JRST BADNAM ;Not name nor octal number
JRST GOTBIT ;Actually read an octal number into B
MOVSI X,-NLHPRV
JUMPGE X,NOTLH
LHLOOP: HRLZ B,LHPRVS(X) ;Get name of some priv
CAME B,A
AOBJN X,LHLOOP
HLLZ B,LHPRVS(X) ;Maybe get bit value
JUMPL X,GOTBIT
NOTLH: MOVSI X,-NRHPRV
JUMPGE X,NOTRH
RHLOOP: HRLZ B,RHPRVS(X)
CAME B,A
AOBJN X,RHLOOP
HLRZ B,RHPRVS(X) ;Get RH value
JUMPL X,GOTBIT
NOTRH: OUTSTR [ASCIZ/No such privilege that I know of./]
EXIT
GOTBIT: MOVEM B,USRBIT# ;Remember privilege bit to search for
>;IFN FTUSER
REPEAT 0,< ;Anyone can read privileges out of UFD (or even from INFO)
MOVEI A,0
GETPRV A,
TLO A,WANTPR
SETPRV A,
TLC A,WANTPR
TLCE A,WANTPR
JRST [ OUTSTR [ASCIZ /You are not privileged to run this program. Please
see a wizard.
/]
EXIT ]
>;REPEAT 0
INIT DSK,17
'DSK '
0
JRST NODISK
INIT LST,0
IFN FTUSER,<
'TTY '
>;IFN FTUSER
IFE FTUSER,<
'DSK '
>;IFE FTUSER
LSTBUF,,
JRST NODISK
MOVE A,['PRIVS ']
MOVSI B,'LST'
SETZB C,D
ENTER LST,A
JRST NOENT
MOVE A,[' 1 1']
MOVSI B,'UFD'
MOVEI C,0
MOVE D,[' 1 1']
LOOKUP DSK,A
JRST NOMFD
HRR D,JOBFF
SUBI D,1
MOVEM D,MFDPTR
HLRE C,D
HRRZ B,JOBFF
SUB B,C
HRRZM B,JOBFF
CORE B,
JRST NOCORE
MOVEI E,0
INPUT DSK,D
STATZ DSK,740000
JRST MFDERR
CLOSE DSK,
PUSHJ P,MFDSOR ;Compress and/or sort MFD
MOVE Z,MFDPTR
ADDI Z,1
LOOP:
; MOVE A,(Z)
; MOVSI B,'UFD'
; MOVEI C,0
; MOVE D,[' 1 1']
; LOOKUP DSK,A
; JRST NOUFD
; MTAPE DSK,RDINFO
; JRST NORDIN
IFE FTUSER,<
PUSHJ P,LIST
>;IFE FTUSER
IFN FTUSER,<
MOVE A,1(Z) ;Get privs
TDNE A,USRBIT ;Got bit we're searching for
PUSHJ P,LSTUSR ;Yes, type out PPN
>;IFN FTUSER
AOBJN Z,.+1
AOBJN Z,LOOP
EXIT
IFN FTUSER,<
LSTUSR: MOVE T,(Z) ;Get PPN
PUSHJ P,SIXPUT ;Output it
MOVEI TT,11
JRST PUT ;Follow with a tab
SIXIN: MOVE X,[POINT 6,A]
SETZB A,B ;A WILL RETURN SIXBIT, B RETURNS OCTAL NUMBER
SIXINL: INCHWL Y
ANDI Y,177 ;IGNORE BUCKY BITS
CAIN Y,15
JRST SIXINL ;IGNORE CR
CAIN Y,12
JRST SIXINX ;RETURN
CAIL Y,"0"
CAILE Y,"7" ;MAYBE THIS IS OCTAL NUMBER AFTER ALL
JRST SIXIN2 ;NOPE
CAME X,[POINT 6,A] ;BETTER NOT HAVE SEEN NON DIGIT
POPJ P, ;LOSE
LSH B,3
ADDI B,-"0"(Y) ;ADD IN NEW OCTAL DIGIT
JRST SIXINL
SIXINX: AOS (P)
JUMPN B,CPOPJ ;ONE SKIP FOR NUMBER
AOS (P)
POPJ P,
SIXIN2: TRZ Y,40
TRZE Y,100
TRO Y,40 ;CONVERT ASCII TO SIXBIT
TLNE X,770000 ;END OF SIXBIT WORD?
IDPB Y,X ;NO, DEPOSIT NEW CHAR
JUMPN B,CPOPJ ;DIRECT RETURN QUICK IF BOTH NUMBER AND NAME
JRST SIXINL
>;IFN FTUSER
;MFDSOR MFDSO1 MFDSO2 MFDSO3 MFDSO4 MFDSO5 LADJ RADJ
MFDSOR: MOVE Z,MFDPTR
AOJGE Z,EMMFD
HRRZ X,Z
MFDSO1: SKIPN A,(Z)
JRST MFDSO2
HLRZ B,1(Z)
CAIE B,'UFD'
JRST [ PUSHJ P,NOTUFD
JRST MFDSO2 ]
IFE FTUSER,<
HRRZ B,A ;PRG
PUSHJ P,LADJ ;LEFT ADJUST IT
HRLZM B,(X)
HLRZ B,A ;PRJ
PUSHJ P,LADJ
HRRM B,(X) ;STORE PRG,,PRJ (LEFT ADJUSTED)
>;IFE FTUSER
IFN FTUSER,<
MOVEM A,(X) ;DON'T BOTHER LEFT ADJUSTING FOR THIS VERSION
>;IFN FTUSER
MOVE B,13+PRVBIT(Z) ;GET PRIVILEGE WORD
MOVEM B,1(X) ;AND STORE AFTER PRG,,PRJ
ADDI X,2
MFDSO2: ADD Z,[UFDN,,UFDN]
JUMPL Z,MFDSO1
HRRZ A,X
CORE A,
JRST NOCORE
SUBI X,1
SUB X,MFDPTR
MOVN X,X
HRLM X,MFDPTR
IFE FTUSER,< ;DON'T SORT MFD FOR SINGLE BIT SEARCH
OUTSTR [ASCIZ/Sorting MFD.../]
MOVE Z,MFDPTR
ADDI Z,1
MFDSO3: MOVE A,(Z)
MOVE B,1(Z) ;PRIVILEGES
MOVE X,Z
MFDSO4: CAMLE A,(X)
EXCH B,1(X)
CAMLE A,(X)
EXCH A,(X)
AOBJN X,.+1
AOBJN X,MFDSO4
MOVEM A,(Z)
MOVEM B,1(Z)
AOBJN Z,.+1
AOBJN Z,MFDSO3
MOVE Z,MFDPTR
ADDI Z,1
MFDSO5: MOVE A,(Z)
HLRZ B,A
PUSHJ P,RADJ
HRRZM B,(Z)
HRRZ B,A
PUSHJ P,RADJ
HRLM B,(Z)
AOBJN Z,.+1 ;SKIP OVER PRIVILEGE WORD IN THIS RADJ PASS
AOBJN Z,MFDSO5
OUTSTR [ASCIZ/sort done.
/]
>;IFE FTUSER
POPJ P,
LADJ: SKIPE B
TRNE B,770000
POPJ P,
LSH B,6
JRST LADJ
RADJ: SKIPE B
TRNE B,77
POPJ P,
LSH B,-6
JRST RADJ
;LIST PRIVLP PRIVL1 NOPRV1 PRNBIT PRNLB1 PRNBTR PRNRB1 OCTLH OCTRH OCTOUT OCTOU1 OUTSIX SIXPUT SIXPU1 PUTSTR PUTST1 PUT CPOPJ1 CPOPJ
LIST: MOVE T,(Z) ;USER NAME
SKIPN 1(Z) ;PRIVILEGES
POPJ P, ;DON'T LIST UNLESS THERE ARE PRIVS
PUSHJ P,SIXPUT
MOVEI TT,11
PUSHJ P,PUT
MOVE A,1(Z) ;GET PRIVILEGES
PRIVLP: JFFO A,PRIVL1
JRST NOPRV1
PRIVL1: MOVSI C,400000
MOVN B,B
LSH C,(B) ;GENERATE THE BIT
ANDCAM C,A ;TURN IT OFF IN A
PUSHJ P,PRNBIT
MOVEI TT,";"
SKIPE A
PUSHJ P,PUT
JRST PRIVLP
NOPRV1: MOVEI T,[ASCIZ /
/]
PUSHJ P,PUTSTR
POPJ P,
PRNBIT: HLLZ B,C
HRLZ C,C
JUMPE B,PRNBTR ;JUMP IF NOT A LH BIT
MOVSI C,-NLHPRV
PRNLB1: TDNN B,LHPRVS(C)
AOBJN C,PRNLB1
JUMPGE C,OCTLH
HRRZ T,LHPRVS(C)
JRST OUTSIX
PRNBTR: MOVSI B,-NRHPRV
PRNRB1: TDNN C,RHPRVS(B)
AOBJN B,PRNRB1
JUMPGE B,OCTRH
HRRZ T,RHPRVS(B)
JRST OUTSIX
OCTLH: HLRZ T,B
PUSHJ P,OCTOUT
MOVEI T,[ASCIZ /,,0/]
JRST PUTSTR
OCTRH: HLRZ T,C
OCTOUT: IDIVI T,10
JUMPE T,OCTOU1
HRLM TT,(P)
PUSHJ P,OCTOUT
HLRZ TT,(P)
OCTOU1: ADDI TT,"0"
JRST PUT
OUTSIX: JUMPE T,CPOPJ
MOVEI TT,0
ROTC T,6
JUMPE TT,OUTSIX
ADDI TT,40
PUSHJ P,PUT
JRST OUTSIX
SIXPUT: JUMPE T,CPOPJ
MOVEI TTT,6
SIXPU1: MOVEI TT,0
ROTC T,6
ADDI TT,40
PUSHJ P,PUT
SOJG TTT,SIXPU1
POPJ P,
PUTSTR: HRLI T,440700
PUTST1: ILDB TT,T
JUMPE TT,CPOPJ
PUSHJ P,PUT
JRST PUTST1
PUT: SOSG LSTBUF+2
OUT LST,
CAIA
JRST PUTERR
IDPB TT,LSTBUF+1
POPJ P,
CPOPJ1: AOS (P)
CPOPJ: POPJ P,
;NODISK NOMFD NOCORE MFDERR EMMFD NOTUFD NOUFD NORDIN NOENT PUTERR NOWRIN MFDPTR LSTBUF RDINFO INFO PDL
NODISK: OUTSTR [ASCIZ /CAN'T INIT THE DISK
/]
EXIT
NOMFD: OUTSTR [ASCIZ /CAN'T LOOKUP THE MFD
/]
EXIT
NOCORE: OUTSTR [ASCIZ /NOT ENOUGH CORE
/]
EXIT
MFDERR: OUTSTR [ASCIZ /ERROR READING MFD
/]
EXIT
EMMFD: OUTSTR [ASCIZ /THE MFD IS EMPTY
/]
EXIT
NOTUFD: OUTSTR [ASCIZ /EXTENSION IN MFD IS NOT 'UFD'
/]
POPJ P,
NOUFD: OUTSTR [ASCIZ /CAN'T LOOKUP A UFD
/]
EXIT
NORDIN: OUTSTR [ASCIZ /MTAPE TO READ INFO FAILED
/]
EXIT
NOENT: OUTSTR [ASCIZ /CAN'T ENTER PRIVS.LST
/]
EXIT
PUTERR: OUTSTR [ASCIZ /ERROR IN OUTPUT TO LIST FILE
/]
EXIT
NOWRIN: OUTSTR [ASCIZ /MTAPE TO WRITE INFO FAILED
/]
EXIT
MFDPTR: 0
LSTBUF: BLOCK 3
RDINFO: 'GODMOD'
10
INFO
INFO: BLOCK 4
PDL: BLOCK 100
END GO